home *** CD-ROM | disk | FTP | other *** search
/ Amiga CD-Sensation: Demos Are Forever / Amiga CD-Sensation - Ausgabe 1 - Demos Are Forever (1996)(GTI - Schatztruhe)(DE)[!].iso / Big Bunch / The Rest / Mapping Demo / RRTasm.asm < prev    next >
Assembly Source File  |  1993-03-28  |  13KB  |  597 lines

  1.   CODE, PUBLIC
  2. *****    VOID __regargs UnPackByteRun(UBYTE *from, UBYTE *to)
  3. *****        calling from assembly:          a0   ,       a1
  4.          XDEF @UnPackByteRun
  5. @UnPackByteRun:
  6.           move.l    d2,-(SP)
  7.           moveq.l   #$7F,d2
  8.           bra.s     upb_startit
  9. upb_copyit
  10.           and.w     d2,d0
  11. upb_copy_loop
  12.           move.b    (a0)+,(a1)+
  13.           dbf       d0,upb_copy_loop
  14. upb_startit
  15.           move.b    (a0)+,d0
  16.           bmi.s     upb_copyit
  17.           beq.s     upb_out
  18.           and.w     d2,d0
  19.           move.b    (a0)+,d1
  20. upb_repeatit
  21.           move.b    d1,(a1)+
  22.           dbf       d0,upb_repeatit
  23.           bra.s     upb_startit
  24. upb_out
  25.           move.l    (SP)+,d2
  26.           rts
  27.  
  28.   CODE,PUBLIC
  29.      xref _LVOLoadRGB4
  30.      xref _GfxBase
  31.      xref _vport
  32. *****  VOID __regargs ComputeInterColor(UWORD *from (a0), UWORD *to (a1), UWORD step (d0));
  33. @ComputeInterColor::
  34.      movem.l   a2/a6/d2-d7,-(SP)
  35.      moveq.l   #15,d2
  36.      lea       cic_intercolor(PC),a2
  37.  
  38.      moveq.l   #31,d1
  39. cic_loop1:
  40.      move.w    (a0)+,d3  ;color
  41.      move.w    (a1)+,d4
  42.      moveq.l   #0,d7
  43.      move.w    d3,d5     ;red
  44.      move.w    d4,d6
  45.      lsr.w     #8,d5
  46.      lsr.w     #8,d6
  47.      sub.w     d5,d6
  48.      muls      d0,d6
  49.      asr.w     #4,d6
  50.      add.w     d5,d6
  51.      and.w     d2,d6
  52.      move.w    d6,d7
  53.      move.w    d3,d5     ;green
  54.      move.w    d4,d6
  55.      lsr.w     #4,d5
  56.      lsr.w     #4,d6
  57.      and.w     d2,d5
  58.      and.w     d2,d6
  59.      sub.w     d5,d6
  60.      muls      d0,d6
  61.      asr.w     #4,d6
  62.      add.w     d5,d6
  63.      and.w     d2,d6
  64.      lsl.w     #4,d7
  65.      add.w     d6,d7
  66.      move.w    d3,d5     ;blue
  67.      move.w    d4,d6
  68.      and.w     d2,d5
  69.      and.w     d2,d6
  70.      sub.w     d5,d6
  71.      muls      d0,d6
  72.      asr.w     #4,d6
  73.      add.w     d5,d6
  74.      and.w     d2,d6
  75.      lsl.w     #4,d7
  76.      add.w     d6,d7
  77.      move.w    d7,(a2)+  ;done
  78.  
  79.      dbf       d1,cic_loop1
  80.  
  81.      moveq.l   #32,d0  ;Load ### Colors into Active ViewPort
  82.      BASEREG a4
  83.      movea.l   _vport(a4),a0
  84.      movea.l   _GfxBase(a4),a6
  85.      BASEREG OFF
  86.      lea       cic_intercolor(PC),a1
  87.      jsr       _LVOLoadRGB4(a6)
  88.  
  89.      moveq.l   #3,d0
  90.      jsr       @WaitFRAMES(PC)
  91.  
  92.      movem.l   (SP)+,a2/a6/d2-d7
  93.      rts
  94. cic_intercolor:
  95.      ds.b      32*4  ;MaxKOLORs * 4
  96.  
  97.  
  98.   CODE,PUBLIC
  99.      xref      _LVOWaitTOF
  100. *****  VOID __regargs WaitFRAMES(UWORD frames(d0));
  101. @WaitFRAMES::
  102.      movem.l   a6/d2,-(SP)
  103.      BASEREG a4
  104.      movea.l   _GfxBase(a4),a6
  105.      BASEREG OFF
  106.      move.l    d0,d2
  107.      beq.s     wf_exit
  108. wf_loop:
  109.      jsr       _LVOWaitTOF(a6)
  110.      subq.w    #1,d2
  111.      bne.s     wf_loop
  112. wf_exit:
  113.      movem.l   (SP)+,a6/d2
  114.      rts
  115.  
  116. *****  extern ULONG __regargs
  117. *****     SLAM_BLITTER(struct custom *a0, BLIT_PARMS *a1);
  118.  
  119. @SLAM_BLITTER::
  120.  
  121. *** extern VOID __regargs SLAM_BLITTER(BLIT_PARMS *a0); ***
  122.  
  123. *****  Blitter begins at offset 64 (0x40)
  124. *****  BLIT_PARMS;
  125. *****     USHORT planes;              // 0
  126. *****   /*** 96  (0x60) ***/
  127. *****     SHORT  cmod,bmod,amod,dmod; // 2,4,6,8
  128. *****   /*** 112 (0x70) ***/
  129. *****     USHORT cdat,bdat,adat;      // 10,12,14
  130. *****   /*** 64  (0x40) ***/
  131. *****     USHORT con0, con1;          // 16,18
  132. *****     USHORT afwm,alwm;           // 20,22
  133. *****     USHORT *cpt,*bpt,*apt,*dpt; // 24,28,32,36
  134. *****     USHORT size;                // 40
  135. *****   /*** For MultiPlane Blits ***/
  136. *****     SHORT  adda,addb,addcd;     // 42,44,46
  137.  
  138.  
  139.      xref      _LVOOwnBlitter
  140.      xref      _LVODisownBlitter
  141.      xref      _LVOWaitBlit
  142.  
  143.      movem.l   a2/a6,-(SP)
  144.  
  145.      BASEREG a4
  146.      movea.l   _GfxBase(a4),a6
  147.      BASEREG OFF
  148.      lea       (a0),a2
  149.  
  150.      jsr       _LVOOwnBlitter(a6)
  151.      move.w    (a2)+,d1      ;Planes
  152.  
  153. sbloop:
  154.      lea       $dff040,a0         ; HARDWARE (blitter)
  155.      lea       (a2),a1
  156.  
  157.      jsr       _LVOWaitBlit(a6)   ; Doesn't modify d0,d1,a0,a1
  158.  
  159.      move.l    (a1)+,32(a0)    ;MODs
  160.      move.l    (a1)+,36(a0)
  161.      move.l    (a1)+,48(a0)    ;src Data
  162.      move.w    (a1)+,52(a0)
  163.  
  164.      move.l    (a1)+,(a0)+     ;con0 + con1
  165.      move.l    (a1)+,(a0)+     ;"a" word masks
  166.      move.l    (a1)+,(a0)+     ;csrc
  167.      move.l    (a1)+,(a0)+     ;bsrc
  168.      move.l    (a1)+,(a0)+     ;asrc
  169.      move.l    (a1)+,(a0)+     ;dest
  170.      move.w    (a1)+,(a0)      ;size and begin blit!!!
  171.  
  172.      moveq.l   #0,d0           ;Add offset to next plane
  173.      move.w    (a1)+,d0        ;a
  174.      add.l     d0,30(a2)
  175.      move.w    (a1)+,d0        ;b
  176.      add.l     d0,26(a2)
  177.      move.w    (a1)+,d0        ;cd
  178.      add.l     d0,22(a2)
  179.      add.l     d0,34(a2)
  180.  
  181.      subq.l    #1,d1           ;Decrement Plane counter
  182.      bne.s     sbloop
  183.  
  184.      jsr       _LVODisownBlitter(a6)
  185.  
  186.      movem.l   (SP)+,a2/a6
  187.      rts
  188.  
  189. ;---------------------------------------------------------------------
  190.  
  191.      xref      _Xarray
  192.      xref      _Yarray
  193.      xref      _FastRead
  194.  
  195. ****  short x=d4,y=d5,xxx=d0,yyy=d1;
  196.  
  197. **** alters d0,d1,a0,d3=output
  198.  
  199. ReadPoint macro
  200.      move.l    d4,d0     ;index off x and y to get reflections
  201.      move.l    d5,d1
  202.      add.w     (a1)+,d0
  203.      add.w     (a2)+,d1
  204. ;---------
  205.  
  206.      BASEREG   a4
  207.  
  208.      tst.w     d0
  209.      bmi.s     rp_nopixel\@
  210.      tst.w     d1
  211.      bmi.s     rp_nopixel\@
  212.      cmp.w     #319,d0
  213.      bgt.s     rp_nopixel\@
  214.      cmp.w     #199,d1
  215.      bgt.s     rp_nopixel\@
  216.  
  217.      add.w     d1,d1          ; d1*=MOD (40)
  218.      add.w     d1,d1
  219.  
  220.      move.l    d0,d7
  221.      andi.w    #15,d7         ;d0=sX-=(d7=(sx&15))
  222.  
  223.      sub.w     d7,d0
  224.      lsr.w     #3,d0          ;d0=sX>>3
  225.      add.l     0(a6,d1),d0          ;d0=(sX>>3)+(MOD*sY)
  226.      move.w    #$8000,d1      ;Pixel=(0x8000>>d1)
  227.      lsr.w     d7,d1
  228.  
  229.      movea.l   d0,a0          ;Read(OffSet,Pixel)
  230.      and.w     (a0),d1
  231.  
  232.      beq.s     rp_nopixel\@
  233.      addq.l    #1,d3
  234. rp_nopixel\@
  235.  
  236.      BASEREG   OFF
  237.  
  238.      endm
  239.  
  240. ***** VOID DoDemo();
  241.      xref      _Sprite2
  242.      xref      _Sprite3
  243.      xref      _Sprite3_data
  244.      xref      _Sprite3a_data
  245.      xref      _Sprite4
  246.      xref      _Sprite5
  247.      xref      _Sprite5_data
  248.      xref      _Sprite5a_data
  249.      xref      _LVOGetMsg
  250.      xref      _LVOMoveSprite
  251.      xref      _LVOChangeSprite
  252.      xref      _Yoffsets
  253.     xref _ComputeStarField
  254.     xref _DisplayStarField
  255.      xref _MyWindow
  256.  
  257. _DoDemo::
  258. ****  register short yy=d2;
  259. ****  register short output=d3;
  260. ****  short x=d4,y=d5,xxx=d0,yyy=d1;
  261. ****  short xdir=d6,ydir=d7;
  262. ****  USHORT *sp1=a3,*sp2=a5
  263. ****  X/Yarray point a1,a2
  264.  
  265.      movem.l   d2-d7/a3/a5,-(SP)
  266.  
  267.      moveq.l   #45,d5
  268.      moveq.l   #100,d4
  269.      moveq.l   #-3,d6
  270.      moveq.l   #2,d7
  271.  
  272. dd_loop_0
  273.      add.w     d7,d5     ; add ydir to y
  274.      cmp.w     #10,d5
  275.      bge.s     dd_xs0
  276.      moveq.l   #2,d7
  277. dd_xs0
  278.      cmp.w     #158,d5
  279.      blt.s     dd_xs1
  280.      moveq.l   #-2,d7
  281. dd_xs1
  282.      add.w     d6,d4     ; add xdir to x
  283.      cmp.w     #10,d4
  284.      bge.s     dd_ys0
  285.      moveq.l   #3,d6
  286. dd_ys0
  287.      cmp.w     #278,d4
  288.      blt.s     dd_ys1
  289.      moveq.l   #-3,d6
  290. dd_ys1
  291.      lea       (6+_Sprite3_data),a3
  292.      lea       (6+_Sprite5_data),a5
  293.  
  294.      move.l    d7,-(SP)
  295.      BASEREG   a4
  296.      lea       _Yarray(a4),a2
  297.      lea       _Xarray(a4),a1
  298.      lea       _Yoffsets(a4),a6
  299.      BASEREG   OFF
  300.  
  301.      moveq.l   #31,d2     ;yy
  302.  
  303. dd_loop_1
  304.      moveq.l   #0,d3     ;output
  305.  
  306.      ReadPoint ;31 readpoints
  307.      add.w     d3,d3
  308.      ReadPoint
  309.      add.w     d3,d3
  310.      ReadPoint
  311.      add.w     d3,d3
  312.      ReadPoint
  313.      add.w     d3,d3
  314.      ReadPoint
  315.      add.w     d3,d3
  316.      ReadPoint
  317.      add.w     d3,d3
  318.      ReadPoint
  319.      add.w     d3,d3
  320.      ReadPoint
  321.      add.w     d3,d3
  322.  
  323.      ReadPoint
  324.      add.w     d3,d3
  325.      ReadPoint
  326.      add.w     d3,d3
  327.      ReadPoint
  328.      add.w     d3,d3
  329.      ReadPoint
  330.      add.w     d3,d3
  331.      ReadPoint
  332.      add.w     d3,d3
  333.      ReadPoint
  334.      add.w     d3,d3
  335.      ReadPoint
  336.      add.w     d3,d3
  337.      ReadPoint
  338.      move.w    d3,(a3)   ;Update Sprite data
  339.      addq.l    #4,a3
  340.      add.w     d3,d3
  341.  
  342.      ReadPoint
  343.      add.w     d3,d3
  344.      ReadPoint
  345.      add.w     d3,d3
  346.      ReadPoint
  347.      add.w     d3,d3
  348.      ReadPoint
  349.      add.w     d3,d3
  350.      ReadPoint
  351.      add.w     d3,d3
  352.      ReadPoint
  353.      add.w     d3,d3
  354.      ReadPoint
  355.      add.w     d3,d3
  356.      ReadPoint
  357.      add.w     d3,d3
  358.  
  359.      ReadPoint
  360.      add.w     d3,d3
  361.      ReadPoint
  362.      add.w     d3,d3
  363.      ReadPoint
  364.      add.w     d3,d3
  365.      ReadPoint
  366.      add.w     d3,d3
  367.      ReadPoint
  368.      add.w     d3,d3
  369.      ReadPoint
  370.      add.w     d3,d3
  371.      ReadPoint
  372.      add.w     d3,d3
  373.  
  374.      addq.l    #2,a1
  375.      addq.l    #2,a2
  376.  
  377.      move.w    d3,(a5)   ; Update Sprite Data
  378.      addq.l    #4,a5
  379.  
  380.      subq.w    #1,d2
  381.      bne       dd_loop_1
  382.  
  383.      move.l    (SP)+,d7
  384.  
  385.      BASEREG   a4
  386.      movea.l   _GfxBase(a4),a6
  387.      BASEREG   OFF
  388.  
  389.      BASEREG   a4
  390.      movea.l   _vport(a4),a0
  391.      lea       _Sprite2(a4),a1
  392.      BASEREG   OFF
  393.      move.l    d4,d0
  394.      move.l    d5,d1
  395.      jsr       _LVOMoveSprite(a6)
  396.      BASEREG   a4
  397.      movea.l   _vport(a4),a0
  398.      lea       _Sprite4(a4),a1
  399.      BASEREG   OFF
  400.      move.l    d4,d0
  401.      addi.w    #16,d0
  402.      move.l    d5,d1
  403.      jsr       _LVOMoveSprite(a6)
  404.  
  405.      BASEREG   a4
  406.      movea.l   _vport(a4),a0
  407.      lea       _Sprite3(a4),a1
  408.      BASEREG   OFF
  409.      lea       _Sprite3_data,a2
  410.      jsr       _LVOChangeSprite(a6)
  411.      BASEREG   a4
  412.      movea.l   _vport(a4),a0
  413.      lea       _Sprite5(a4),a1
  414.      BASEREG   OFF
  415.      lea       _Sprite5_data,a2
  416.      jsr       _LVOChangeSprite(a6)
  417.  
  418.     jsr       _ComputeStarField(PC)
  419.     jsr       _DisplayStarField(PC)
  420.  
  421.      jsr       _LVOWaitTOF(a6)
  422.  
  423. ;----
  424.  
  425.      add.w     d7,d5     ; add ydir to y
  426.      cmp.w     #10,d5
  427.      bge.s     dd_xs0a
  428.      moveq.l   #2,d7
  429. dd_xs0a
  430.      cmp.w     #158,d5
  431.      blt.s     dd_xs1a
  432.      moveq.l   #-2,d7
  433. dd_xs1a
  434.      add.w     d6,d4     ; add xdir to x
  435.      cmp.w     #10,d4
  436.      bge.s     dd_ys0a
  437.      moveq.l   #3,d6
  438. dd_ys0a
  439.      cmp.w     #278,d4
  440.      blt.s     dd_ys1a
  441.      moveq.l   #-3,d6
  442. dd_ys1a
  443.      lea       (6+_Sprite3a_data),a3
  444.      lea       (6+_Sprite5a_data),a5
  445.  
  446.      move.l    d7,-(SP)
  447.      BASEREG   a4
  448.      lea       _Yarray(a4),a2
  449.      lea       _Xarray(a4),a1
  450.      lea       _Yoffsets(a4),a6
  451.      BASEREG   OFF
  452.  
  453.      moveq.l   #31,d2     ;yy
  454.  
  455. dd_loop_1a
  456.      moveq.l   #0,d3     ;output
  457.  
  458.      ReadPoint ;31 readpoints
  459.      add.w     d3,d3
  460.      ReadPoint
  461.      add.w     d3,d3
  462.      ReadPoint
  463.      add.w     d3,d3
  464.      ReadPoint
  465.      add.w     d3,d3
  466.      ReadPoint
  467.      add.w     d3,d3
  468.      ReadPoint
  469.      add.w     d3,d3
  470.      ReadPoint
  471.      add.w     d3,d3
  472.      ReadPoint
  473.      add.w     d3,d3
  474.  
  475.      ReadPoint
  476.      add.w     d3,d3
  477.      ReadPoint
  478.      add.w     d3,d3
  479.      ReadPoint
  480.      add.w     d3,d3
  481.      ReadPoint
  482.      add.w     d3,d3
  483.      ReadPoint
  484.      add.w     d3,d3
  485.      ReadPoint
  486.      add.w     d3,d3
  487.      ReadPoint
  488.      add.w     d3,d3
  489.      ReadPoint
  490.      move.w    d3,(a3)   ;Update Sprite data
  491.      addq.l    #4,a3
  492.      add.w     d3,d3
  493.  
  494.      ReadPoint
  495.      add.w     d3,d3
  496.      ReadPoint
  497.      add.w     d3,d3
  498.      ReadPoint
  499.      add.w     d3,d3
  500.      ReadPoint
  501.      add.w     d3,d3
  502.      ReadPoint
  503.      add.w     d3,d3
  504.      ReadPoint
  505.      add.w     d3,d3
  506.      ReadPoint
  507.      add.w     d3,d3
  508.      ReadPoint
  509.      add.w     d3,d3
  510.  
  511.      ReadPoint
  512.      add.w     d3,d3
  513.      ReadPoint
  514.      add.w     d3,d3
  515.      ReadPoint
  516.      add.w     d3,d3
  517.      ReadPoint
  518.      add.w     d3,d3
  519.      ReadPoint
  520.      add.w     d3,d3
  521.      ReadPoint
  522.      add.w     d3,d3
  523.      ReadPoint
  524.      add.w     d3,d3
  525.  
  526.      addq.l    #2,a1
  527.      addq.l    #2,a2
  528.  
  529.      move.w    d3,(a5)   ; Update Sprite Data
  530.      addq.l    #4,a5
  531.  
  532.      subq.w    #1,d2
  533.      bne       dd_loop_1a
  534.  
  535.      move.l    (SP)+,d7
  536.  
  537.      BASEREG   a4
  538.      movea.l   _GfxBase(a4),a6
  539.      BASEREG   OFF
  540.  
  541.      BASEREG   a4
  542.      movea.l   _vport(a4),a0
  543.      lea       _Sprite2(a4),a1
  544.      BASEREG   OFF
  545.      move.l    d4,d0
  546.      move.l    d5,d1
  547.      jsr       _LVOMoveSprite(a6)
  548.      BASEREG   a4
  549.      movea.l   _vport(a4),a0
  550.      lea       _Sprite4(a4),a1
  551.      BASEREG   OFF
  552.      move.l    d4,d0
  553.      addi.w    #16,d0
  554.      move.l    d5,d1
  555.      jsr       _LVOMoveSprite(a6)
  556.  
  557.      BASEREG   a4
  558.      movea.l   _vport(a4),a0
  559.      lea       _Sprite3(a4),a1
  560.      BASEREG   OFF
  561.      lea       _Sprite3a_data,a2
  562.      jsr       _LVOChangeSprite(a6)
  563.      BASEREG   a4
  564.      movea.l   _vport(a4),a0
  565.      lea       _Sprite5(a4),a1
  566.      BASEREG   OFF
  567.      lea       _Sprite5a_data,a2
  568.      jsr       _LVOChangeSprite(a6)
  569.  
  570.     jsr       _ComputeStarField(PC)
  571.     jsr       _DisplayStarField(PC)
  572.  
  573.      jsr       _LVOWaitTOF(a6)
  574.  
  575. ;----
  576.  
  577. ;     btst.b    #6,$bfe001     ;mouse check (bne = unset)
  578. ;     bne       dd_loop_0
  579.  
  580. win_UserPort   equ  86
  581.  
  582.      BASEREG   a4              ;check for key press in window
  583.      movea.l   _MyWindow(a4),a0
  584.      BASEREG   OFF
  585.      movea.l   win_UserPort(a0),a0
  586.      movea.l   4,a6
  587.      jsr       _LVOGetMsg(a6)
  588.  
  589.      tst.l     d0
  590.      beq       dd_loop_0
  591.  
  592.      movem.l   (SP)+,d2-d7/a3/a5
  593.      rts
  594.  
  595.     END
  596.  
  597.